<?php
App::uses('AppController', 'Controller');

class ProdutosController extends AppController {
	
	var $components = array('Votacao');

	public function beforeFilter(){
		parent::beforeFilter();
		$this->Auth->allow('melhores_notas', 'ver', 'voto', 'emailVotacao');
	}

	// TODO Apenas administrador
	public function index() {
		$this->Produto->recursive = 0;
		$this->set('produtos', $this->paginate());
	}

	public function add() {
		if ($this->request->is('post')) {
			$this->Produto->create();
			if ($this->Produto->save($this->request->data)) {
				$this->Session->setFlash(__('The produto has been saved'));
				$this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('The produto could not be saved. Please, try again.'));
			}
		}
		$empresas = $this->Produto->Empresa->find('list');
		$tiposProdutos = $this->Produto->TiposProduto->find('list');
		$this->set(compact('empresas', 'tiposProdutos'));
	}

	public function edit($id = null) {
		$this->Produto->id = $id;
		if (!$this->Produto->exists()) {
			throw new NotFoundException(__('Invalid produto'));
		}
		if ($this->request->is('post') || $this->request->is('put')) {
			if ($this->Produto->save($this->request->data)) {
				$this->Session->setFlash(__('The produto has been saved'));
				$this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('The produto could not be saved. Please, try again.'));
			}
		} else {
			$this->request->data = $this->Produto->read(null, $id);
		}
		$empresas = $this->Produto->Empresa->find('list');
		$tiposProdutos = $this->Produto->TiposProduto->find('list');
		$this->set(compact('empresas', 'tiposProdutos'));
	}

	public function delete($id = null) {
		if (!$this->request->is('post')) {
			throw new MethodNotAllowedException();
		}
		$this->Produto->id = $id;
		if (!$this->Produto->exists()) {
			throw new NotFoundException(__('Invalid produto'));
		}
		if ($this->Produto->delete()) {
			$this->Session->setFlash(__('Produto deleted'));
			$this->redirect(array('action' => 'index'));
		}
		$this->Session->setFlash(__('Produto was not deleted'));
		$this->redirect(array('action' => 'index'));
	}
	
	public function melhores_notas($tipo = 'tudo'){
		return $this->Produto->melhoresNotas($tipo);
	}
	
	public function ver($id = null, $link = "", $recursive = 0){
		if(is_null($id) || !is_numeric($id) || empty($link))
			throw new NotFoundException('Dados inválidos!');
		$this->Produto->recursive = $recursive;
		$dados = $this->Produto->findByIdAndLink($id, $link);
		if(empty($dados))
			throw new NotFoundException('Dados inválidos!');
		else $this->set('dados', $dados);
		$this->breadCrumb($dados['Produto']['tipos_produto_id']);
	}
	
	public function voto($nota, $produto, $email = null){
		$this->Votacao->tipoVotacao('Produto');
		$this->Votacao->candidatoAVoto($produto);
		if($email == null){
			$email = $this->usuarioLogado['email'];
			// ATIVAR ESSE VOTO!
		}
		$this->Votacao->usuario($email);
		$hash = $this->Votacao->voto($nota);
		$this->emailVotacao($email, $hash, $produto);
		$this->autoRender = false;
	}
	
	protected function emailVotacao($email, $hash, $produto){
		$this->Email->novoEmail();
		$this->Email->assunto(__("email_assunto_voto_produto"));
		$this->Email->destinatario($email);
		$this->Email->helpers('Html');
		$this->Email->template("voto", "default");
		$this->Email->set('email', $email);
		$this->Email->set('hash', $hash);
		$this->Email->set('hash', $produto);
		$this->Email->mensagem("");
	}
	
	protected function breadCrumb($id){
		$this->Produto->breadCrumb($id);
		$this->set('breadcrumb', $this->Produto->familia);
	} 
}
